<?php
/**
 * Created by PhpStorm.
 * User: 戎大富
 * Date: 2018/6/13
 * Time: 10:40
 */
namespace app\api\controller;
use think\Controller;
use think\Db;
include_once $_SERVER ['DOCUMENT_ROOT'] . '/upacp_demo_app/sdk/acp_service.php';

class  Upacp extends Base  {
    // 定义配置项
    private $config=array(
        'merId'              => '777290058179091',

    );
    /**
     * 异地登录验证
     * @return string
     */
    public function __construct()
    {
        // 如果配置项为空 则直接返回
        if (!empty($config)) {
            $this->config=$config;
        }
    }
    /**
     * 统一下单
     * @param  array $order 订单 必须包含支付所需要的参数 body(产品描述)、total_fee(订单喵额)、out_trade_no(订单号)、product_id(产品id)、trade_type(类型：JSAPI，NATIVE，APP)
     */
    public function UpacpPayTn($number, $pay){
        $params = array(
            //以下信息非特殊情况不需要改动
            'version' => \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version,                 //版本号
            'encoding' => 'utf-8',				  //编码方式
            'txnType' => '01',				      //交易类型
            'txnSubType' => '01',				  //交易子类
            'bizType' => '000201',				  //业务类型
            'frontUrl' =>  \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->frontUrl,  //前台通知地址
            'backUrl' => \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->backUrl,	  //后台通知地址
            'signMethod' => \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod,	              //签名方法
            'channelType' => '08',	              //渠道类型，07-PC，08-手机
            'accessType' => '0',		          //接入类型
            'currencyCode' => '156',	          //交易币种，境内商户固定156

            //TODO 以下信息需要填写
            'merId' => $this->config['merId'],		//商户代码，请改自己的测试商户号，此处默认取demo演示页面传递的参数
            'orderId' => $number,	//商户订单号，8-32位数字字母，不能含“-”或“_”，此处默认取demo演示页面传递的参数，可以自行定制规则
            'txnTime' => date('YmdHis'),	//订单发送时间，格式为YYYYMMDDhhmmss，取北京时间，此处默认取demo演示页面传递的参数
            'txnAmt' => $pay,	//交易金额，单位分，此处默认取demo演示页面传递的参数

            // 请求方保留域，
            // 透传字段，查询、通知、对账文件中均会原样出现，如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析，请按下面建议的方式填写：
            // 1. 如果能确定内容不会出现&={}[]"'等符号时，可以直接填写数据，建议的方法如下。
            //    'reqReserved' =>'透传信息1|透传信息2|透传信息3',
            // 2. 内容可能出现&={}[]"'符号时：
            // 1) 如果需要对账文件里能显示，可将字符替换成全角＆＝｛｝【】“‘字符（自己写代码，此处不演示）；
            // 2) 如果对账文件没有显示要求，可做一下base64（如下）。
            //    注意控制数据长度，实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用base64_decode解base64后再对数据做后续解析。
            //    'reqReserved' => base64_encode('任意格式的信息都可以'),

            //TODO 其他特殊用法请查看 pages/api_05_app/special_use_purchase.php
        );
        \com\unionpay\acp\sdk\AcpService::sign ( $params ); // 签名
        $url = \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->appTransUrl;
        $result_arr = \com\unionpay\acp\sdk\AcpService::post ($params,$url);
        if(count($result_arr)<=0) { //没收到200应答的情况
            $res['msg'] = '无应答，请稍后再试';
            $res['status'] = 0;
            return $res;
        }
        if (!\com\unionpay\acp\sdk\AcpService::validate ($result_arr) ){
            $res['msg'] = '验签失败，请稍后再试';
            $res['status'] = 0;
            return $res;
        }
        if ($result_arr["respCode"] == "00"){
            //成功
            $res['msg'] = $result_arr["tn"];
            $res['status'] = 200;
            return $res;
        } else {
            //其他应答码做以失败处理
            $res['msg'] = $result_arr["respMsg"];
            $res['status'] = 0;
            return $res;
        }
    }

    /**
     * 验证
     * @return array 返回数组格式的notify数据
     */
    public function huidiao(){
        if (isset ( $_POST ['signature'] )) {
            if(\com\unionpay\acp\sdk\AcpService::validate ( $_POST )){
                $orderId = $_POST ['orderId'];
                $respCode = $_POST ['respCode'];
                if($respCode == '00'){
                    $queryId = $_POST ['queryId'];
                    $result = $this->alltypespay($orderId,$queryId,$queryId);
                    if($result == true){
                        echo 200;
                        exit();
                    }else{
                        echo 0;
                        exit();
                    }
                }
            }

        }
    }

}